package com.syg.scheduled.task;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.time.Duration;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.TimeUnit;

@Component
public class CronLoop {

    /**
     * 特性:第一个定时任务执行完毕,才会执行下一个任务
     *
     * 例如,定时任务每2秒钟执行一次,任务执行耗费8秒钟,第一个任务开始时间秒数为00:00:30;则第二个任务在00:00:40才会执行
     */
    @Scheduled(cron = "*/2 * * * * ?")
    public void cornLoop() throws InterruptedException {
        System.out.println("每2秒钟执行一次" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        TimeUnit.SECONDS.sleep(8);
    }

    /**
     * 需要具体分析一下,这几个特性
     * @throws InterruptedException
     */
    @Scheduled(fixedRate=1000)
    @Scheduled(fixedDelay=1000)
    @Scheduled(fixedDelayString="2000")
    @Scheduled(fixedRate=1000,initialDelay=2000)
    public void delayLoop() throws InterruptedException {
        System.out.println("每2秒钟执行一次" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        // TimeUnit.SECONDS.sleep(8);
    }
}
